###############################################
#                 Dissertacao                 #
#        Preferencias politicas importam?     #
#              MAGALHAES, 2020                #
###############################################


#########################
#  Carregar os pacotes  #
#########################

library(data.table)
library(tidyverse)
library(gdata)
library(plotly)
library(dendextend)
library(cluster)
library(gridExtra)
library(reshape2)


####################
#  Importar bases  #
####################

#Colocar o endereco da pasta na qual foram salvas as bases
setwd("")

base <- rio::import("base_codificada.rda") #Esta base e gerada a partir do codigo "limpeza_codificacao"
sp_idhm <- rio::import("sp_idhm.xlsx") #Parte da base do Atlas de Desenvolvimento Humano
base_homicidio <- rio::import("base_homicidio.xlsx") #Parte dos dados do Atlas da Violencia (IPEA, 2019)

#######################
#  Preparando a base  #
#######################

#Transpor os dados de tx de homicidio e idhm
base$Comarca <- base$Comarca %>% str_to_upper() #Transformar em Caixa Alta

base[base$Comarca=="JUNDIA� / SP",]$Comarca <- "JUNDIA�" #Corrigir um nome

base[base$Comarca=="IPAU�U",]$Comarca <- "IPAUSSU" #Corrigir um nome

base$idhm <- sp_idhm$IDHM[match(base$Comarca, sp_idhm$Munic�pio)] #Transpor os dados do IDHM para a base codificada

base_homicidio$mun <- base_homicidio$mun %>% str_to_upper() #Transformar em caixa alta

base$homicidio <- base_homicidio$tax_hom[match(base$Comarca,
                                               base_homicidio$mun)] #Transpor os dados da tx de homicidio para a base codificada


#########################
#  Testando a hipotese  #
#########################

#### Parametros

crimes <- list(c("furto", "roubo"), c("furto", "roubo", "recepta��o"),
               c("furto", "roubo", "tr�fico", "recepta��o")) #1� parametro: crimes usados para medir a preferencia

n_decisoes <- c(100, 50, 30) #2� parametro: n� minimo de decisoes por juiz em cada crime

###Loop para os tres modelos

tabelas <- list() #objeto para armazenar os resultados dos modelos
n_juizes <- data.frame() #objeto para armazenar o tamanho da amostra de juizes por modelo
decisoes <- data.frame() #objeto para armazenar o n� de decisoes da base de teste

for(i in 1:3){

  ###Calcular as proporcoes de condenacoes dos juizes nos crimes
  base_teste <- base %>% 
    group_by(Magistrado, Assunto)%>% #Agrupa pelo nome do magistrado e pelo crime
    summarise("prop_condena" = (sum(condena)/ #calcula a proporcao de condenacao e o total julgados por juiz/ano
                                  (sum(condena)+ sum(absolve)))*100,
              "Total" = sum(condena) +
                sum(absolve)) %>%
    filter(Assunto %in% crimes[[i]] & Total >= n_decisoes[i]) %>%  #Parametros do teste: Seleciona os crimes e o minimo de decisoes por crime
    select(-Total) %>% 
    spread(Assunto, "prop_condena") %>% 
    drop_na()
  
  n_juizes <- rbind(n_juizes, nrow(base_teste)) #Total de juizes na amostra
  
  ###Calcular as distancias ideologica entre os juizes
  a <- (base_teste[,2]+base_teste[,3])/2
  
  base_teste$media <- a[,1]
  
  base_teste <- base_teste %>%
    arrange(media) %>% 
    ungroup() %>% 
    mutate(num = 1:n()) 
  
  
  dist_mag <- base_teste %>% select(crimes[[i]]) %>% 
    dist(method="euclidian") #Calcular a dist�ncia entre os juizes
  
  dist_mag <- melt(as.matrix(dist_mag), varnames = c("row", "col")) %>%
    arrange(desc(value)) #Transforma a base
  
  if (dist_mag[1,1] > dist_mag[1,2]){
    dist_mag <- dist_mag %>% filter(row==dist_mag[1,2])
  } else {
    dist_mag <- dist_mag %>% filter(row==dist_mag[1,1])
  }  #COnsiderando o juiz com a menor media como ancora, logo, como 0
  
  #Transpondo a medida para os juizes
  
  base_teste$preferencia <- dist_mag$value[match(base_teste$num,
                                                 dist_mag$col)] 
  
  #########################
  #  Testando a hipotese  #
  #########################
  
  #Tranpor a medida de preferencia para a base
  base$preferencia <- base_teste$preferencia[match(base$Magistrado,
                                                   base_teste$Magistrado)] 
  
  #Finalizar a base
  base_teste <- base %>% drop_na(preferencia) %>%  #Retirar juizes fora da amostra
                  filter(!Assunto %in% crimes[[i]]) #Retirar os crimes usados para a construcao da medida
  
  decisoes <- rbind(decisoes, nrow(base_teste)) #Total de decisoes na base de teste
  
  base_teste$entrancia <- as.factor(base_teste$entrancia) #transforma a variavel entrancia em fator
  
  base_teste$entrancia <- relevel(base_teste$entrancia, ref="final")
  
  #####Rodando o modelo
  
  reg <- glm(condena ~ preferencia + idhm + homicidio  + preferencia*entrancia +
               as.factor(Assunto), data=base_teste, family="binomial")
  
  a <- summary(reg)
  
  a <- round(a$coefficients, 3)
  
  a <- a[c(1:6, (nrow(a)-1),nrow(a)),]
  
  
  b <- round(exp(reg$coefficients), 3)
  
  b <- b[c(1:6, (length(b)-1),length(b))]
  
  d <- as.data.frame(round(exp(confint.default(reg)), 3))
  
  d <- paste(d$`2.5 %`, ",", d$`97.5 %`)
  
  d <- d[c(1:6, (length(d)-1),length(d))]
  
  a <- as.data.frame(cbind(a, b, d))
  
  a <- a %>% select(-`z value`) %>% 
    rename("Raz�o de chances" = b, "Intervalo" = d) %>% 
    select(1,2,4,5,3)
  
  rownames(a) <-  c("Intercepto", "Prefer�ncia", "IDHM",
                    "Taxa de Homic�dio",
                    "Entr�ncia inicial -Ref: Entr�ncia Final",
                    "Entr�ncia intermedi�ria -Ref: Entr�ncia Final",
                    "Prefer�ncia: Entr�ncia Inicial",
                    "Prefer�ncia: Entr�ncia Intermedi�ria")
  
  tabelas[[i]] <- a
}

#################
#   Resultados  #
#################

#Resultado do 1 modelo
tabelas[[1]]
decisoes[1,1] #N� de decisoes
n_juizes[1,1] #N� de juizes

#Resultado do 2 modelo
tabelas[[2]]
decisoes[2,1] #N� de decisoes
n_juizes[2,1] #N� de juizes

#Resultado do 3 modelo
tabelas[[3]]
decisoes[3,1] #N� de decisoes
n_juizes[3,1] #N� de juizes
